package com.alks.function.mapper.finance.mtlcosts;

import com.alks.entity.data.entity.PcApAmt;
import com.alks.entity.data.entity.PcCostDetail;
import com.alks.entity.data.entity.PcCostTemp;
import com.alks.function.data.dto.finance.ryfinance.CostDetailDto;
import com.alks.function.data.request.finance.mtlcosts.SuppDutyTtlFindRequest;
import com.alks.function.data.request.finance.ryfinance.CostDTTRequest;
import com.alks.function.data.request.finance.ryfinance.CostDetUpRequest;
import com.alks.function.data.request.finance.ryfinance.CostDetailQueryRequest;
import com.alks.function.data.vo.finance.ryfinance.TempToDetVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author MS
 * @since 2024/6/7上午11:10
 */
public interface PcCostDetailMapper extends BaseMapper<PcCostDetail> {

    /**
     *费用明细转明细输入-修改
     * @param request 定位数据
     * @param loginName 用户英文名
     * @param companyId 公司ID
     * @return 待写入数据
     */
    List<PcCostTemp> modifyQuery(@Param("request") List<CostDTTRequest> request, @Param("loginName") String loginName, @Param("companyId") String companyId);


    /**
     *费用明细转明细输入-制定扣款数据查询
     * @param request 定位数据
     * @param loginName 用户英文名
     * @param companyId 公司ID
     * @return 待写入temp的数据
     */
    List<PcCostTemp> chargeBackQuery(@Param("request") List<CostDTTRequest> request, @Param("loginName") String loginName, @Param("companyId") String companyId);

    /**
     * 改变扣款状态
     * @param chargeBackDetails 需要修改的数据
     * @param processStatus 修改后的状态
     */
    void upStatus(@Param("chargeBackDetails") List<TempToDetVo> chargeBackDetails, @Param("processStatus") String processStatus);

    /**
     * 补单责任明细扣款数据汇入
     */
    void suppDutyTtlFinance(@Param("request") List<SuppDutyTtlFindRequest> request, @Param("companyId") String companyId, @Param("userName") String userName, @Param("financeYymm") String financeYymm, @Param("accountName") String accountName);

    /**
     * 结算作业查询
     * @param financeYymm 结算月份
     * @param accountName 结算方式
     * @param vendorName 厂商
     * @param companyId 公司ID
     * @param userName 用户名
     * @return 结算新增数据
     */
    List<PcApAmt> tempAddQuery(@Param("financeYymm") String financeYymm, @Param("accountName") String accountName, @Param("vendorName") String vendorName, @Param("companyId") String companyId, @Param("userName") String userName);

    /**
     * 结算作业删除回滚
     * @param slipNo 结算单号
     * @param companyId 公司ID
     */
    void tempDel(@Param("slipNo") String slipNo, @Param("companyId") String companyId);

    /**
     * 结算作业写入结算单号
     *
     * @param financeYymm 结算月份
     * @param accountName 结算方式
     * @param vendorName  厂商
     * @param balanceNo   结算单号
     * @param companyId 公司ID
     */
    void tempAddUp(@Param("financeYymm") String financeYymm, @Param("accountName") String accountName, @Param("vendorName") String vendorName, @Param("balanceNo") String balanceNo, @Param("companyId") String companyId);

    /**
     * 明细待更新数据查询
     * @param request 查询条件
     * @param companyId 公司ID
     * @return 待更新的数据
     */
    List<PcCostDetail> costDetUpDateQuery(@Param("request") List<CostDetUpRequest> request, @Param("companyId") String companyId);

    /**
     * 打钩记录结算
     *
     * @param request     待结算数据
     * @param financeYymm 结算月份
     * @param userName    结算人
     * @param companyId   公司ID
     */
    void costDetCheck(@Param("request") List<CostDetUpRequest> request, @Param("financeYymm") String financeYymm, @Param("userName") String userName, @Param("companyId") String companyId);

    /**
     * 财务备注修改
     * @param request 待修改数据
     * @param companyId 公司ID
     */
    void cwRekUp(@Param("request") List<CostDetUpRequest> request, @Param("companyId") String companyId);

    /**
     * 取消打钩结算
     * @param request 待修改数据
     * @param companyId
     */
    void costDetUnCheck(@Param("request") List<CostDetUpRequest> request, @Param("companyId") String companyId);

    /**
     * 结算厂商回显
     * @param financeYymm 结算月份
     * @param accountName 结算方式
     * @param companyId 公司ID
     * @return 结算厂商
     */
    List<Map<String, String>> vendorBack(@Param("financeYymm") String financeYymm, @Param("accountName") String accountName, @Param("companyId") String companyId);

    /**
     * 费用结算明细数据
     * @param request 查询条件
     * @param companyId 公司ID
     * @return 结算明细数据
     */
    List<CostDetailDto> costDetailQuery(@Param("request") CostDetailQueryRequest request, @Param("companyId") String companyId);

    /**
     * 获取费用结算明细求和数据
     */
    List<PcCostDetail> costDetailSumQuery(@Param("request") CostDetailQueryRequest request, @Param("companyId") String companyId);
}
